/*
gpio.c
Project 3

Vincent Yee vyee2@asu.edu 1202853946 
Jimmy Nguyen jnguye22@asu.edu 1202701781 

CSE 325 Embedded Microprocessor Systems
Spring 2013
*/


#include "support_common.h" /* include peripheral declarations and more */
#include <stdio.h>
#include "gpio.h"
//#include "MCF52233_GPIO.h"


int gpio_port_dd_get_pin_state(int p_pin)
{
        if (p_pin == 5)
        {
                return (MCF_GPIO_SETDD & 0x20) >> 5 & 0x01;
        }
       
        else if (p_pin == 6)
                {
                        return (MCF_GPIO_SETDD & 0x40) >> 6 & 0x01;
                }
       
        else if (p_pin == 7)
                {
                        return (MCF_GPIO_SETDD & 0x80) >> 7 & 0x01;
                }
        return 0;
}

void gpio_port_dd_init(int p_pin)
{
 // Configures PDDPAR and DDRDD so pin p_pin of port DD is in
 // GPIO function and the pin data direction is input.

        // PDDPAR5=swtch2, PDDPAR6=swtch3, PDDPAR7=swtch4
        if (p_pin == 7)
        {
                MCF_GPIO_PDDPAR &= 0x7F;
                MCF_GPIO_DDRDD &= 0xBF;
        }
       
        else if (p_pin == 6)
        {
                MCF_GPIO_PDDPAR &= 0xBF;
                MCF_GPIO_DDRDD &= 0xDF;
        }
       
        else if (p_pin == 5)
        {
                MCF_GPIO_PDDPAR &= 0xDF;
                MCF_GPIO_DDRDD &= 0xEF;
        }
       

}

int gpio_port_tc_get_pin_state(int p_pin)
{
        if (p_pin == 0)
                {
                return ((MCF_GPIO_SETTC & 1) >> p_pin);
                }
               
                else if (p_pin == 1)
                        {
                        return ((MCF_GPIO_SETTC & 2) >> p_pin);
                        }
               
                else if (p_pin == 2)
                        {
                        return ((MCF_GPIO_SETTC & 4) >> p_pin);
                        }
       
                else if (p_pin == 3)
                        {
                        return ((MCF_GPIO_SETTC & 8) >> p_pin);
                        }
        return 0;
}

void gpio_port_tc_init(int p_pin)
{
        if(p_pin == 0)
                {
                        MCF_GPIO_PTCPAR = MCF_GPIO_PTCPAR_PTCPAR0(MCF_GPIO_PTCPAR_DTIN0_GPIO);
                        MCF_GPIO_DDRTC |= MCF_GPIO_DDRTC_DDRTC0;
                }
       
        else if (p_pin == 1)
                {
                        MCF_GPIO_PTCPAR = MCF_GPIO_PTCPAR_PTCPAR1(MCF_GPIO_PTCPAR_DTIN1_GPIO);
                        MCF_GPIO_DDRTC |= MCF_GPIO_DDRTC_DDRTC1;
                }      
               
        else if (p_pin ==2)
                {
                        MCF_GPIO_PTCPAR = MCF_GPIO_PTCPAR_PTCPAR2(MCF_GPIO_PTCPAR_DTIN2_GPIO);
                        MCF_GPIO_DDRTC |= MCF_GPIO_DDRTC_DDRTC2;
                }
        else if (p_pin ==3)
                {
                        MCF_GPIO_PTCPAR = MCF_GPIO_PTCPAR_PTCPAR3(MCF_GPIO_PTCPAR_DTIN3_GPIO);
                        MCF_GPIO_DDRTC |= MCF_GPIO_DDRTC_DDRTC3;
                }
               
}

void gpio_port_tc_set_pin_state(int p_pin ,int p_state)
{
       
        if (p_pin == 0)
        {
                if ( p_state == 1)
                        {
                                MCF_GPIO_SETTC |= 0x01;
                        }
                       
                        else if (p_state == 0)
                        {                              
                                MCF_GPIO_CLRTC &= 0xFE;
                        }
        }
       
        if (p_pin == 1)
                {
                        if ( p_state == 1)
                                {
                                        MCF_GPIO_SETTC |= 0x02;
                                }
                               
                                else if (p_state == 0)
                                {                              
                                        MCF_GPIO_CLRTC &= 0xFD;
                                }
                }
        if (p_pin == 2)
                {
                        if ( p_state == 1)
                                {
                                        MCF_GPIO_SETTC |= 0x04;
                                }
                               
                                else if (p_state == 0)
                                {  
                                        MCF_GPIO_CLRTC &= 0xFB;
                                }
                }
       
        if (p_pin == 3)
                {
                        if ( p_state == 1)
                                {
                                        MCF_GPIO_SETTC |= 0x08;
                                }
                               
                                else if (p_state == 0)
                                {
                                        MCF_GPIO_CLRTC &= 0xF7;
                                }
                }
}

void gpio_port_ta_init()
{
	//MCF_GPIO_PORTTA = MCF_GPIO_PORTTA_PORTTA3;
	MCF_GPIO_PTAPAR = MCF_GPIO_PTAPAR_PTAPAR3(3); 
	MCF_GPIO_DDRTA |= MCF_GPIO_DDRTA_DDRTA3;
	//MCF_GPIO_SETTA |= 0x08;
	
}

